const path = require('path')

module.exports = {
  // 基本路径
  publicPath: '/epcd_visual/',
  // publicPath: '',
  // 输出文件目录de
  outputDir: 'dist',
  // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
  assetsDir: 'static',
  // 指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径
  indexPath: 'index.html',

  // 默认情况下，生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存。然而，这也要求 index 的 HTML 是被 Vue CLI 自动生成的。如果你无法使用 Vue CLI 生成的 index HTML，你可以通过将这个选项设为 false 来关闭文件名哈希。
  filenameHashing: true,

  // eslint-loader 是否在保存的时候检查
  lintOnSave: false,
  // 是否使用包含运行时编译器的 Vue 构建版本
  runtimeCompiler: false,
  // webpack配置
  // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
  chainWebpack: (config) => {
    config.plugin('html').tap((args) => {
      // args[0].cdn = cdn;
      return args
    })

    config.plugins.delete('prefetch')
    config.plugins.delete('preload')
  },

  configureWebpack: (config) => {
    if (process.env.NODE_ENV === 'production') {
      // 为生产环境修改配置...
      config.mode = 'production'
    } else {
      // 为开发环境修改配置...
      config.mode = 'development'
    }

    /*
        config.externals = {
            'vue': 'Vue',
            'vue-router': 'VueRouter',
        }
        */

    Object.assign(config, {
      // 开发生产共同配置
      resolve: {
        extensions: ['.js', '.vue', '.json'],
        // 别名配置
        alias: {
          '@': path.resolve(__dirname, './src'),
          '@a': path.resolve(__dirname, './src/assets'),
          '@c': path.resolve(__dirname, './src/components'),
          '@v': path.resolve(__dirname, './src/views'),
          '@h': path.resolve(__dirname, './src/https'),
          '@router': path.resolve(__dirname, './src/router'),
          '@store': path.resolve(__dirname, './src/store'),
        },
      },

      // 关闭 webpack 的性能提示
      performance: {
        hints: false,
      },
      // 或者
      // 警告 webpack 的性能提示
      // performance: {
      //     hints:'warning',
      //     // 入口起点的最大体积 整数类型（以字节为单位 500k）
      //     maxEntrypointSize: 50000000,
      //     // 生成文件的最大体积 整数类型（以字节为单位 800k）
      //     maxAssetSize: 80000000,
      //     // 只给出 js 文件的性能提示
      //     assetFilter: function(assetFilename) {
      //         return assetFilename.endsWith('.js');
      //     }
      // }
    })
  },

  // 生产环境是否生成 sourceMap 文件
  productionSourceMap: false,
  // css相关配置
  css: {
    // 是否使用css分离插件 ExtractTextPlugin
    extract: true,
    // 开启 CSS source maps?
    sourceMap: false,
    // css预设器配置项
    loaderOptions: {
      css: {
        // localIdentName: '[name]-[hash]',
        // camelCase: 'only'
      },
    },
  },
  // use thread-loader for babel & TS in production build
  // enabled by default if the machine has more than 1 cores
  parallel: require('os').cpus().length > 1,
  // PWA 插件相关配置
  // see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
  pwa: {},
  // webpack-dev-server 相关配置
  devServer: {
    disableHostCheck: true,
    // host: '0.0.0.0',
    port: 8088,
    // https: false,
    // hotOnly: false,
    // 设置代理
    proxy: {
      '/api': {
        // 目标 API 地址  http://47.108.144.9:30081/api/epcd
        // target: '',
        target: 'http://47.108.144.9:30081/api',
        // target: 'http://117.48.217.51:9300/m',
        // target: 'http://139.199.68.181:9300/m',
        // target: 'http://SF0001110923G:9300/m',
        // target: 'http://m.sfddj.com/m',
        // 将主机标头的原点更改为目标URL
        changeOrigin: true,
        // 这里理解成用‘/m’代替target里面的地址，后面组件中我们掉接口时直接用m代替
        // 比如我要调用'http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22'，直接写‘/api/xxx/duty?time=2017-07-07 14:57:22’即可
        pathRewrite: {
          '^/api': '',
        },
      },
    },

    stats: {
      //去掉mini-css-extract-plugin莫名其妙的报warning  没用
      // children: false,
      // warningsFilter: (warning) => /mini-css-extract-plugin[^]*Conflicting order between:/gm.test(warning)
    },

    // before: app => {}
  },
  // 第三方插件配置
  pluginOptions: {
    foo: {
      // 插件可以作为 `options.pluginOptions.foo` 访问这些选项。
    },
  },
}
